package net.cathackers.devel.scmp.chat.interfaces;

import java.util.Set;

import net.cathackers.devel.scmp.auth.interfaces.AuthToken;
import net.cathackers.devel.scmp.auth.interfaces.UserID;
import net.cathackers.devel.scmp.auth.interfaces.UserProfile;
import net.cathackers.devel.scmp.chat.impl.xmpp.presence.PresenceInformation;
import net.cathackers.devel.scmp.xmpp.Packet;

public interface ChatSession {
    public static final int MAJOR_VERSION = 1;
    public static final int MINOR_VERSION = 0;

    public static final int STATUS_CLOSED = -1;
    public static final int STATUS_CONNECTED = 1;
    public static final int STATUS_AUTHENTICATED = 3;

    public void setStatus(int status);

    public int getStatus();

    public String getSessionID();

    public void setSessionID(String sessionID);

    public XMPPConnection getConnection();

    public void setConnection(XMPPConnection connection);

    public String getPossibleStreamFeatures();

    public void requestAuthorization(UserID fromID);

    public void deliverPacket(Packet packet);

    public void setPresence(PresenceInformation info);

    public AuthToken getAuthToken();

    public UserID getUserID();

    public UserProfile getUserProfile();

    public PresenceInformation getPresenceInformation();

    public void bye();

    void setAuthToken(AuthToken authToken);

    void setUserID(UserID userID);

    String getAvailableStreamFeatures();

    boolean isAuthenticated();
    
    /*public void setSubscribers(Set<UserID> map);
    
    public Set<UserID> getSubscribers();
    
    public void addSubscriber(UserID id);
    
    public void removeSubscriber(UserID id);*/
    
    public boolean isInitializedPresence();
    
    public void setInitializedPresence(boolean isInitialized);

    public void setRosterRequested(boolean isRequested);

    public boolean getRosterRequested();

}
